<?php

/**
 * turma_ano_letivo actions.
 *
 * @package    ibe
 * @subpackage turma_ano_letivo
 * @author     Creatix
 * @version    SVN: $Id: actions.class.php 23810 2009-11-12 11:07:44Z Kris.Wallsmith $
 */
class turma_ano_letivoActions extends sfActionsCreatix
{
  public function executeIndex(sfWebRequest $request)
  {
    return $this->forward('turma_ano_letivo', 'list');
  }

	public function executeGrid()
	{
		//Recupero todas as informações necessárias para trabalhar com o grid
		$this->getRequestDataTable();
		$this->filter['id_turma']	= $this->getRequestParameter('id_turma');
		$this->data					= TurmaAnoLetivoTable::consultar($this->filter, $this->order);
		$this->total_data			= count($this->data);
		$this->data					= $this->paginadorDataTable($this->data, $this->page_num, parent::LIMIT_PAGE_DATA_TABLE);

		sfLoader::loadHelpers(array('Url'));

	    foreach($this->data as $key => $r)
	    {
	    					    	$actions = array(
				'edit'	 => "<a href='".url_for($this->getModuleName().'/edit?id_turma_ano_letivo='.$r['id_turma_ano_letivo'])."' class='icoEditar'></a>",
				'aluno' => "<a href='".url_for($this->getModuleName().'/alunos?id_turma_ano_letivo='.$r['id_turma_ano_letivo'])."' class='icoAdicionar' title='Adicinar Aluno'></a>",
	    		'grade' => "<a href='".url_for('grade_turma/new?id_turma_ano_letivo='.$r['id_turma_ano_letivo'])."' class='icoOffice' title='Grade horária'></a>",
				'delete' => "<a href='".url_for($this->getModuleName().'/delete?id_turma_ano_letivo='.$r['id_turma_ano_letivo'])."'  class='icoExcluir delete'></a>",
			);
																																																							    	$this->data[$key]['act'] = implode(' ', $actions);
    	}

		$this->setJSONDataTable($this->data, $this->colunas, $this->total_data);
		return sfView::NONE;
	}


    public function executeList()
    {
        $this->form = new TurmaAnoLetivoForm();
    	$this->colunas	= array(
    		      		$this->form['id_turma_ano_letivo']->renderLabel() => "id_turma_ano_letivo",
			      		$this->form['nu_ano_letivo']->renderLabel() => "nu_ano_letivo",
			      		$this->form['periodo']->renderLabel() => "periodo",
			      		$this->form['idade_inicio']->renderLabel() => "idade_inicio",
			      		$this->form['idade_fim']->renderLabel() => "idade_fim",
			      		$this->form['qtde_alunos']->renderLabel() => "qtde_alunos",
			      		$this->form['st_turma_ano_letivo']->renderLabel() => "st_turma_ano_letivo",
						"Ações"	=> "act"
		);

        $this->filter = $this->_getFilter();
        
        $this->parametros	= array(
										array(	'name'  => 'id_turma',
												'value'	=>  $this->getRequestParameter('id_turma')
											)
									);

        $this->setTemplate('index');
    }


    public function executeDisponibilidade()
    {
        $this->form = new TurmaAnoLetivoForm();
    	$this->colunas	= array(
    		      		$this->form['id_turma_ano_letivo']->renderLabel() => "id_turma_ano_letivo",
			      		'Turma' 	=> "nm_turma",
			      		'Número' 	=> "nu_turma",
			      		$this->form['nu_ano_letivo']->renderLabel() => "nu_ano_letivo",
			      		$this->form['periodo']->renderLabel() => "periodo",
						"Ações"		=> "act"
		);

        $this->filter = $this->_getFilter();
        
        $this->parametros	= array(
										array(	'name'  => 'idade',
												'value'	=>  Util::calcularIdade($this->getRequestParameter('id'))
											)
									);
    }

	public function executeGridDisponivel()
	{
		//Recupero todas as informações necessárias para trabalhar com o grid
		$this->getRequestDataTable();
		$this->filter['idade']		= $this->getRequestParameter('idade');
		$this->data					= TurmaAnoLetivoTable::disponiveis($this->filter, $this->order);
		$this->total_data			= count($this->data);
		$this->data					= $this->paginadorDataTable($this->data, $this->page_num, parent::LIMIT_PAGE_DATA_TABLE);

		sfLoader::loadHelpers(array('Url'));

	    foreach($this->data as $key => $r)
	    {
			$actions = array(
				'check'		=> '<input type="checkbox" value="'.$r['id_turma_ano_letivo'].'" name="id_turma_ano_letivo[]" />'
				//'edit'	 => "<a href='".url_for($this->getModuleName().'/edit?id_turma_ano_letivo='.$r['id_turma_ano_letivo'])."' class='icoEditar'></a>",
				//'aluno' => "<a href='".url_for($this->getModuleName().'/alunos?id_turma_ano_letivo='.$r['id_turma_ano_letivo'])."' class='icoAdicionar' title='Adicinar Aluno'></a>",
				//'delete' => "<a href='".url_for($this->getModuleName().'/delete?id_turma_ano_letivo='.$r['id_turma_ano_letivo'])."'  class='icoExcluir delete'></a>",
			);
			
			$this->data[$key]['nm_turma']	= $r['Turma']['nm_turma'];
			$this->data[$key]['nu_turma']	= $r['Turma']['nu_turma'];
			$this->data[$key]['act']		= implode(" ", $actions);
																																																							    	$this->data[$key]['act'] = implode(' ', $actions);
    	}

		$this->setJSONDataTable($this->data, $this->colunas, $this->total_data);
		return sfView::NONE;
	}

    public function executeFilter()
	{
	    $filter = new Filtro(
			$this->getRequestParameter(sfActionsCreatix::FILTER_SESSION_USER_ATTRIBUTE)
		);

		$filter->setCulture($this->getUser()->getCulture());
		$this->getUser()->setAttribute('pg_num',1,$this->getModuleName());

		$this->getUser()->setAttribute(
			sfActionsCreatix::FILTER_SESSION_USER_ATTRIBUTE,
			serialize($filter),
			$this->getModuleName()
		);

		return $this->forward($this->getModuleName(), '/list');
	}

  public function executeNew(sfWebRequest $request)
  {
  	$id_turma = $request->isMethod(sfRequest::POST) ? $request->getPostParameter('turma_ano_letivo[id_turma]') : $request->getParameter('id_turma');
  	$turma = Doctrine::getTable('Turma')->find($id_turma);
	$this->forward404Unless($turma, sprintf('A turma informada (%s) não existe.', $id_turma));
	$filter = new TurmaAnoLetivo();
  	$filter['id_turma'] = $id_turma;
    $this->form = new TurmaAnoLetivoForm($filter);
  }

  public function executeCreate(sfWebRequest $request)
  {
    $this->forward404Unless($request->isMethod(sfRequest::POST));

    $this->form = new TurmaAnoLetivoForm();

    $this->processForm($request, $this->form);

    $this->forward($this->getModuleName(), 'new');
  }

  public function validateCreate()
  {
  	return $this->_validateCommon();
  }

  public function handleErrorCreate()
  {
    return $this->forward($this->getModuleName(), 'new');
  }

  public function executeEdit(sfWebRequest $request)
  {
    $this->forward404Unless($turma_ano_letivo = Doctrine::getTable('TurmaAnoLetivo')->find(array($request->getParameter('id_turma_ano_letivo'))), sprintf('Object turma_ano_letivo does not exist (%s).', $request->getParameter('id_turma_ano_letivo')));
    
    
	$this->id_turma_ano_letivo	= $this->getRequestParameter('id_turma_ano_letivo');
    $this->turma = Doctrine::getTable('TurmaAnoLetivo')->find($this->id_turma_ano_letivo);

    $this->setTemplate('tree');
  }

  public function executeUpdate(sfWebRequest $request)
  {
    $this->forward404Unless($request->isMethod(sfRequest::POST) || $request->isMethod(sfRequest::PUT));
    $this->forward404Unless($turma_ano_letivo = Doctrine::getTable('TurmaAnoLetivo')->find(array($request->getParameter('id_turma_ano_letivo'))), sprintf('Object turma_ano_letivo does not exist (%s).', $request->getParameter('id_turma_ano_letivo')));
    $this->form = new TurmaAnoLetivoForm($turma_ano_letivo);

    $this->processForm($request, $this->form);

    $this->forward($this->getModuleName(), 'edit');
  }

  public function validateUpdate()
  {
  	return $this->_validateCommon();
  }
  
  	/**
  	 * 
  	 * Validação COMUM aos métodos CREATE e UPDATE
  	 */
	private function _validateCommon()
	{
		switch ( $this->getRequestParameter('turma_ano_letivo[periodo]') )
	  	{
	  		case 'M':
	  		case 'N':
	  		case 'V':
	  			return true;
	  			break;
	  		default:
	  			$this->request->setError('turma_ano_letivo{periodo}', 'Período inválido');
	  			return false;
	  	}
	  	
	  	return true;
	}

  public function handleErrorUpdate()
  {
    return $this->forward($this->getModuleName(), 'edit');
  }

  public function executeDelete(sfWebRequest $request)
  {
    try
    {
    $request->checkCSRFProtection();

    $this->forward404Unless($turma_ano_letivo = Doctrine::getTable('TurmaAnoLetivo')->find(array($request->getParameter('id_turma_ano_letivo'))), sprintf('Object turma_ano_letivo does not exist (%s).', $request->getParameter('id_turma_ano_letivo')));
    $id_turma = $turma_ano_letivo->getIdTurma();
    $turma_ano_letivo->setStTurmaAnoLetivo('E');
    $turma_ano_letivo->save();
    //$turma_ano_letivo->delete();

    $this->redirect('turma/edit?id_turma='.$id_turma);
    }
    catch(Excepiton $e)
	{
		$this->getUser()->setFlash('erro', $e->getMessage());
    	$this->redirect('turma_ano_letivo/index');
	}

  }

  protected function processForm(sfWebRequest $request, sfForm $form)
  {
  	try
  	{
    $form->bind($request->getParameter($form->getName()), $request->getFiles($form->getName()));
    if ($form->isValid())
    {
      $turma_ano_letivo = $form->save();
	  $this->getUser()->setFlash('mensagem', 'Dados salvos com sucesso.');
      $this->redirect('turma_ano_letivo/edit?id_turma_ano_letivo='.$turma_ano_letivo->getIdTurmaAnoLetivo());
    }
    else
    {
    throw new Exception($form->getErrorSchema());
    }
    }
    catch(Exception $e)
	{
		$this->getUser()->setFlash('erro', $e->getMessage());
	}
  }
	
  /*
   * MENUS DE ACESSO VIA CONTEXTO
   */
  
	private function menuAluno($object)
	{
		$menu = array();
			$menu = array(
				'Adicionar' => array(
					'icone' => 'add',
					'url'	=> url_for('aluno_turma/list?id_turma_ano_letivo='.$object['id_turma_ano_letivo'])
				)
			);

		return json_encode($menu);
	}

	/**
	 * Carregamento dos nós da arvore.
	 */
	public function executeJSONTree()
	{
		sfLoader::loadHelpers(array('Url'));

		$this->id_turma_ano_letivo	= $this->getRequestParameter('id_turma_ano_letivo');
		$this->turma				= Doctrine::getTable('TurmaAnoLetivo')->find($this->id_turma_ano_letivo);

		$json	= array(
			//NÓ DADOS
			array(
				'title' 	=> 'Dados base',
				'url'		=> url_for($this->getModuleName().'/apresentacao?id_turma='.$this->turma['id_turma'].'&id_turma_ano_letivo='.$this->id_turma_ano_letivo),
				'key'		=> 'folder_base',
				'isFolder'	=> 'true',
				'select'	=> 'true',
				'activate'    => 'true'
	    	),
			//NÓ BIMESTRE
			array(
				'title' 	=> 'Bimestres',
				'key'		=> 'folder_bimestre',
				'url'		=> url_for($this->getModuleName().'/bimestre?id_turma_ano_letivo='.$this->id_turma_ano_letivo),
				'isFolder'	=> 'true',
				'isLazy'	=> 'true',
				'urlLazy'	=> url_for($this->getModuleName().'/JSONBimestre?id_turma_ano_letivo='.$this->id_turma_ano_letivo)
	    	),
			//NÓ GRADE
			array(
				'title' 	=> 'Grade Horária',
				'key'		=> 'folder_grade',
				'url'		=> url_for($this->getModuleName().'/grade?id_turma_ano_letivo='.$this->id_turma_ano_letivo),
				'isFolder'	=> 'true',
				'isLazy'	=> 'true',
				'urlLazy'	=> url_for($this->getModuleName().'/JSONGrade?id_turma_ano_letivo='.$this->id_turma_ano_letivo)
	    	),
			//NÓ ALUNOS
			array(
				'title' 	=> 'Alunos',
				'key'		=> 'folder_aluno',
				'url'		=> url_for($this->getModuleName().'/alunos?id_turma_ano_letivo='.$this->id_turma_ano_letivo),
				'isFolder'	=> true,
				'isLazy'	=> 'true',
				'urlLazy'	=> url_for($this->getModuleName().'/JSONAlunos?id_turma_ano_letivo='.$this->id_turma_ano_letivo),
				'menu'		=> self::menuAluno($this->id_turma_ano_letivo)
	    	)
	    );

		$this->getResponse()->setHttpHeader('Content-Type','application/json; charset=utf-8');

    	return $this->renderText(json_encode($json));
		exit;
	}
}
